/******************************************************************************
* 文件名称: string.c
* 内容摘要: 字符串处理
* 创建者の: 孔佳伟
* 个人主页: https://gitee.com/openes
* 修改记录: 
******************************************************************************/

#include <string.h>

#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))

/******************************************************************************
* 函数名称: U32 StrCpy(char* dest, const char* src, S32 n)
* 功能说明: 字符串拷贝
* 输入参数: char* dest        --目标地址
    　　　　const char* src   --源地址
    　　　　S32   n           --拷贝长度
* 输出参数: 无
* 函数返回: 成功拷贝的字符数
* 其它说明: 无
******************************************************************************/
U32 StrCpy(char* dest, const char* src, S32 n)
{
    U32 ret = 0;

    if(NULL == dest || NULL == src)
        return 0;

    for(ret = 0; src[ret] && (ret<(U32)n); ret++)
        dest[ret] = src[ret];
    
    dest[ret] = 0;

    return ret;
}

/******************************************************************************
* 函数名称: U32 StrLen(const char* s)
* 功能说明: 获取字符串长度
* 输入参数: const char* s     --字符串首地址
* 输出参数: 无
* 函数返回: 字符串长度
* 其它说明: 无
******************************************************************************/
U32 StrLen(const char* s)
{
    U32 ret = 0;

    while(s && s[ret])
        ret++;

    return ret;
}

/******************************************************************************
* 函数名称: BOOL StrCmp(const char* left, const char* right, U32 n)
* 功能说明: 字符串比较
* 输入参数: const char* left        --字符串1
    　　　　const char* right       --字符串2
    　　　　U32         n           --比较长度
* 输出参数: 无
* 函数返回: 0:不相等; 1:相等
* 其它说明: 无
******************************************************************************/
BOOL StrCmp(const char* left, const char* right, U32 n)
{
    BOOL ret = TRUE;
    U32 left_len = StrLen(left);
    U32 right_len = StrLen(right);
    U32 m = MIN(left_len, right_len);
    U32 i = 0;

    n = MIN(m, n);
    ret = (left_len == right_len);
    
    for(i=0; (i<n) && ret; i++)
    {
        ret = (left[i] == right[i]);
        if(!ret)
            break;
    }
    
    return ret;
}
